#!/usr/bin/env node

/**
 * 帮助脚本：添加新的 OAuth token 到 .authtoken 文件
 * 使用方法：node add-token.js
 */

import fs from 'fs';
import path from 'path';
import readline from 'readline';

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

function question(prompt) {
  return new Promise(resolve => rl.question(prompt, resolve));
}

async function main() {
  console.log('='.repeat(60));
  console.log('🔐 添加新的 OAuth Token');
  console.log('='.repeat(60));
  
  const tokenFilePath = path.join(process.cwd(), '.authtoken');
  
  // 读取现有的 token 文件
  let tokens = [];
  if (fs.existsSync(tokenFilePath)) {
    try {
      const content = fs.readFileSync(tokenFilePath, 'utf8');
      tokens = JSON.parse(content);
      console.log(`📄 找到现有的 token 文件，包含 ${tokens.length} 个 token`);
    } catch (error) {
      console.error('❌ 读取 .authtoken 文件失败:', error.message);
      process.exit(1);
    }
  } else {
    console.log('📄 创建新的 .authtoken 文件');
  }

  console.log('\n请提供新的 token 信息：');
  console.log('提示：你可以通过浏览器开发者工具从 claude.ai 获取这些信息\n');

  // 收集新的 token 信息
  const name = await question('👤 用户名称 (例: John Doe): ');
  const accessToken = await question('🔑 Access Token (sk-ant-oat01-...): ');
  const refreshToken = await question('🔄 Refresh Token (sk-ant-ort01-...): ');
  
  // 计算默认过期时间（当前时间 + 24小时）
  const defaultExpiresAt = Date.now() + (24 * 60 * 60 * 1000);
  const expiresAtInput = await question(`⏰ 过期时间戳 (默认: ${defaultExpiresAt}): `);
  const expiresAt = expiresAtInput.trim() ? parseInt(expiresAtInput) : defaultExpiresAt;
  
  const subscriptionType = await question('📋 订阅类型 (默认: max): ') || 'max';

  // 创建新的 token 对象
  const newToken = {
    name: name.trim(),
    claudeAiOauth: {
      accessToken: accessToken.trim(),
      refreshToken: refreshToken.trim(),
      expiresAt: expiresAt,
      scopes: ["user:inference", "user:profile"],
      subscriptionType: subscriptionType.trim()
    }
  };

  // 添加到 tokens 数组
  tokens.push(newToken);

  // 保存到文件
  try {
    fs.writeFileSync(tokenFilePath, JSON.stringify(tokens, null, 4));
    console.log('\n✅ 新的 token 已成功添加！');
    console.log(`📊 总共 ${tokens.length} 个 token`);
    console.log(`📅 过期时间: ${new Date(expiresAt).toISOString()}`);
    
    console.log('\n🚀 下一步:');
    console.log('1. 重启代理服务器以加载新的 token');
    console.log('2. 使用 curl 测试 token 状态:');
    console.log('   curl -s "http://localhost:8082/api/oauth/status" | jq .');
    
  } catch (error) {
    console.error('❌ 保存文件失败:', error.message);
    process.exit(1);
  }

  rl.close();
}

main().catch(error => {
  console.error('❌ 脚本执行失败:', error.message);
  rl.close();
  process.exit(1);
});